package com.mareas.web.jsf.view;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.jsf.FacesContextUtils;

import com.mareas.web.model.Buque;
import com.mareas.web.model.Datosarribo;
import com.mareas.web.model.Datossalida;
import com.mareas.web.model.Operacion;
import com.mareas.web.service.GenericService;

@Component("addNominacionView")
@ManagedBean
@RequestScoped
public class AddNominacionView implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5563047550874338778L;

	@Autowired
	private GenericService genericService;

	private int page = 1;
	private int currentIndex;

	private Datosarribo editedArribo;
	private Datossalida editedSalida;
	private Buque editedBuque;
	private Operacion operacionActual = null;

	public AddNominacionView() {
		super();
	}

	public GenericService getGenericService() {
		return genericService;
	}

	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public void store() {
		editedArribo.setOperacion(operacionActual);
		editedSalida.setOperacion(operacionActual);
		genericService.persist(editedArribo);
		genericService.persist(editedSalida);
		genericService.persist(editedBuque);
	}

	public Datosarribo getEditedArribo() {
		if (editedArribo == null) {
			if (getOperacionActual() != null
					&& !getOperacionActual().getDatosarribos().isEmpty()) {

				for (Datosarribo datosarribo : operacionActual
						.getDatosarribos()) {
					editedArribo = this.getGenericService().get(Datosarribo.class, datosarribo.getArriboId());
				}
			} else {
				editedArribo = new Datosarribo();
			}
		}
		return editedArribo;
	}

	public void setEditedArribo(Datosarribo editedArribo) {
		this.editedArribo = editedArribo;
	}

	public Datossalida getEditedSalida() {
		if (editedSalida == null) {

			if (getOperacionActual() != null
					&& !getOperacionActual().getDatossalidas().isEmpty()) {
				for (Datossalida datossalida : getOperacionActual()
						.getDatossalidas()) {
					editedSalida = this.getGenericService().get(Datossalida.class, datossalida.getSalidaId());
				}
			} else {
				editedSalida = new Datossalida();
			}

		}
		return editedSalida;
	}

	public void setEditedSalida(Datossalida editedSalida) {
		this.editedSalida = editedSalida;
	}

	public Buque getEditedBuque() {
		if (editedBuque == null && getOperacionActual() != null) {
			editedBuque = operacionActual.getBuque();
		}
		return editedBuque;
	}

	public void setEditedBuque(Buque editedBuque) {
		this.editedBuque = editedBuque;
	}

	public Operacion getOperacionActual() {
		FacesContext facescontext = FacesContext.getCurrentInstance();
		if (this.operacionActual == null) {
			ApplicationBean applicationBean = (ApplicationBean) FacesContextUtils
					.getRequiredWebApplicationContext(facescontext).getBean(
							"applicationBean");
			this.operacionActual = applicationBean.getOperacionActual();
			
			if (this.operacionActual != null) {
				this.operacionActual = getGenericService().get(Operacion.class, operacionActual.getOperacionId());
			}
		}
		return this.operacionActual;
	}
	
	public void init() {
		editedArribo = null;
		editedSalida = null;
		editedBuque = null;
		operacionActual = null;
	}
}
